﻿/* 
 * CreateSlide_Timeline
 *
 * Progression4のスライドを作成する際、XMLデータからMovieClipシンボルのタイムラインにテキストなどを自動作成してくれるJSFL
 *
 * Copyright (C) 2010 flabaka
 * version 1.1.0
 * CreateDate 2010/07/19
 * UpdateDate 2010/07/29
 *
 * Developed by flabaka
 * http://flabaka.com/blog/
 *
 * (C) 2010 flabaka and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */

var ans1 = prompt("titleとtxtのフォントサイズ", "40,20");
var ans2 = prompt("titleとtxtのフォントカラー", "#000000,#000000");
var ans3 = prompt("フォント", "メイリオ");
var ans4 = prompt("作成するMovieClip", "Slides");
var ans5 = prompt("マージン", "50");

var path = fl.getDocumentDOM();

//XMLファイルを読み込む
var fileURL = fl.browseForFileURL("open", "XMLファイルを選択してください");
var str = FLfile.read(fileURL);
var xml = new XML(str.replace('<?xml version="1.0" encoding="utf-8"?>', ""));

//ドキュメントの幅と高さを調べておく
var haba = path.width;
var takasa = path.height;

var myarray1 = ans1.split(",");
var myarray2 = ans2.split(",");
var fontface = ans3;
var mcname = ans4;
var margin = Number(ans5);
var folderName = 'Slides/';

//XMLデータのノード数を取得しておく
var n = xml.num.length();

var lib = fl.getDocumentDOM().library;

//MCシンボルを作成
lib.addNewItem('movie clip',folderName + mcname);
if (lib.getItemProperty('linkageImportForRS') == true) {
	lib.setItemProperty('linkageImportForRS', false);
}
lib.setItemProperty('linkageExportForAS', true);
lib.setItemProperty('linkageExportForRS', false);
lib.setItemProperty('linkageExportInFirstFrame', true);
lib.setItemProperty('linkageClassName', mcname);

//MCシンボルを編集モードに
lib.editItem();

path.getTimeline().setSelectedLayers(0);
path.getTimeline().setLayerProperty('layerType', 'guide');
path.getTimeline().setLayerProperty('name', 'guide');
path.getTimeline().addNewLayer("txt", "normal");
path.getTimeline().addNewLayer("title", "normal");

for (var i = 0; i<n; i++){
	
	var typenum = Number(xml.type[i]);
	
	if(i ==0){
		
		switch (typenum) {
			case 0:
				createGuide();
				createTitleCenter();
				break;
				
			case 1:
				createGuide();
				createTxtNormal();
				createTitleTop();
				break;
				
			case 2:
				createGuide();
				createTxtTop();
				break;
			default:
		}
	} else {

		switch (typenum) {
			case 0:
				insertFrame(2);
				insertBlankFrame(1);
				insertBlankFrame(0);
				createTitleCenter();
				break;
				
			case 1:
				insertFrame(2);
				insertBlankFrame(1);
				createTxtNormal();
				insertBlankFrame(0);
				createTitleTop();
				break;
				
			case 2:
				insertFrame(2);
				insertBlankFrame(1);
				createTxtTop();
				insertBlankFrame(0);
				break;
			default:
		}
	}
}

//編集モードを終了
path.exitEditMode();

//ガイドを作成
function createGuide(){
	path.getTimeline().setSelectedLayers(2);
	path.getTimeline().setLayerProperty("locked",false);
	path.addNewLine({x:margin, y:0}, {x:margin, y:takasa});
	path.addNewLine({x:haba-margin, y:0}, {x:haba-margin, y:takasa});
	path.addNewLine({x:0, y:margin}, {x:haba, y:margin});
	path.addNewLine({x:0, y:takasa-margin}, {x:haba, y:takasa-margin});
	path.getTimeline().setLayerProperty("locked",true);
}

//ステージ中央にタイトルを作成
function createTitleCenter(){
	path.getTimeline().setSelectedLayers(0);
	path.addNewText({left:0, top:0, right:(haba - margin*2), bottom:Number(myarray1[0] )* 1.6});
	path.setElementProperty('textType', 'dynamic');
	path.setElementTextAttr("fillColor", myarray2[0]);
	path.setElementTextAttr("face", fontface);
	path.setElementTextAttr('size', Number(myarray1[0]));
	path.setElementTextAttr('alignment', 'center');
	path.setTextString(xml.title[i]);
	path.setElementProperty('autoExpand', false);
	path.setElementProperty('lineType', 'single line');
	path.moveSelectionBy({x:margin, y:(takasa / 2) - Number(myarray1[0] )* 0.8 });
}

//ステージ上部にタイトルを作成
function createTitleTop(){
	path.getTimeline().setSelectedLayers(0);
	path.addNewText({left:0, top:0, right:(haba - margin*2), bottom:Number(myarray1[0] * 1.6)});
	path.setElementProperty('textType', 'dynamic');
	path.setElementTextAttr("fillColor", myarray2[0]);
	path.setElementTextAttr("face", fontface);
	path.setElementTextAttr('size', Number(myarray1[0]));
	path.setElementTextAttr('alignment', 'left');
	path.setTextString(xml.title[i]);
	path.setElementProperty('autoExpand', false);
	path.setElementProperty('lineType', 'single line');
	path.moveSelectionBy({x:margin, y:margin });
}

//ステージ上部にテキストエリアを作成
function createTxtTop(){
	path.getTimeline().setSelectedLayers(1);
	path.addNewText({left:0, top:0, right:(haba- margin*2), bottom:takasa-(margin*2)});
	path.setElementProperty('textType', 'dynamic');
	path.setElementTextAttr("fillColor", myarray2[1]);
	path.setElementTextAttr("face", fontface);
	path.setElementTextAttr('size', Number(myarray1[1]));
	path.setElementTextAttr('alignment', 'left');
	var s = String(xml.contents[i]);
	var pattern = new RegExp("#xA","g")
	var t = s.replace(pattern,"\n");
	path.setTextString(t);
	path.setElementProperty('autoExpand', false);
	path.setElementProperty('lineType', 'multiline');
	path.moveSelectionBy({x:margin, y:margin});
}

//通常位置にテキストエリアを作成
function createTxtNormal(){
	path.getTimeline().setSelectedLayers(1);
	path.addNewText({left:0, top:0, right:(haba- margin*2), bottom:takasa-(margin*4)});
	path.setElementProperty('textType', 'dynamic');
	path.setElementTextAttr("fillColor", myarray2[1]);
	path.setElementTextAttr("face", fontface);
	path.setElementTextAttr('size', Number(myarray1[1]));
	path.setElementTextAttr('alignment', 'left');
	var s = String(xml.contents[i]);
	var pattern = new RegExp("#xA","g")
	var t = s.replace(pattern,"\n");
	path.setTextString(t);
	path.setElementProperty('autoExpand', false);
	path.setElementProperty('lineType', 'multiline');
	path.moveSelectionBy({x:margin, y:margin*3});
}

//フレームを挿入
function insertFrame(layerindex){
	path.getTimeline().setSelectedLayers(layerindex);
	path.getTimeline().insertFrames(1,false,i-1);
}

//空白キーフレームを挿入
function insertBlankFrame(layerindex){
	path.getTimeline().setSelectedLayers(layerindex);
	path.getTimeline().insertBlankKeyframe(i);
	path.getTimeline().setSelectedFrames(i,i,true);
}